Micron Document
C.S.Burner 🪙 ━►🔥GIT Node

Node / reticulum_mirror / MeshChatX / files / scripts / ci / github-build-linux-release-assets.sh

Displaying Raw • Download

scripts/ci/github-build-linux-release-assets.sh dev (af76f09d) Text, 4.81 KB

T8b949e#!/usr/bin/env bash
T8b949e# Build wheel, Linux AppImage/deb (x64 + arm64), optional RPM/APK, frontend zip, and SBOM under ./release-assets/.
T8b949e# Expects repo root as cwd, dependencies installed (task install / pnpm), and meshchatx/public populated when building Electron.
T8b949e# Optional: SKIP_WHEEL=1, SKIP_ELECTRON=1, TRIVY_SBOM=0
T8b949e# Optional: MESHCHATX_LINUX_FORMATS = comma list of appimage,deb,rpm,apk (default: all four)
Tffa657set -euo pipefail

Te6edf3ROOTTff7b72=Ta5d6ff"Tff7b72$(Tffa657cd Ta5d6ff"Tff7b72$(dirname Ta5d6ff"Te6edf3$0Ta5d6ff"Tff7b72)Ta5d6ff/../..Ta5d6ff" Tff7b72&& Tffa657pwdTff7b72)Ta5d6ff"
Tffa657cd Ta5d6ff"Te6edf3$ROOTTa5d6ff"

T8b949e# shellcheck source=scripts/ci/ci-node-path.sh
. Ta5d6ff"Tff7b72$(dirname Ta5d6ff"Te6edf3$0Ta5d6ff"Tff7b72)Ta5d6ff/ci-node-path.shTa5d6ff"

require_node_minTff7b72(Tff7b72) Tff7b72{
Te6edf3_min_majorTff7b72=Ta5d6ff"Tffd700${Te6edf31Tff7b72:-Te6edf322Tffd700}Ta5d6ff"
Te6edf3_verTff7b72=Ta5d6ff"Tff7b72$(node -v T79c0ff2>/dev/null Tff7b72|| Tffa657trueTff7b72)Ta5d6ff"
Te6edf3_majorTff7b72=Ta5d6ff"Tffd700${Te6edf3_verTb4b4b4#vTffd700}Ta5d6ff"
Te6edf3_majorTff7b72=Ta5d6ff"Tffd700${Te6edf3_majorTb4b4b4%%.*Tffd700}Ta5d6ff"
Tff7b72if Tff7b72[ -z Ta5d6ff"Te6edf3$_majorTa5d6ff" Tff7b72] Tff7b72|| Tff7b72[ Ta5d6ff"Te6edf3$_majorTa5d6ff" -lt Ta5d6ff"Te6edf3$_min_majorTa5d6ff" Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffNode.js Tffd700${Te6edf3_min_majorTffd700}Ta5d6ff+ required (got: Tffd700${Te6edf3_verTff7b72:-Te6edf3unknownTffd700}Ta5d6ff); check PATH does not prefer /usr/local/bin over setup-node.Ta5d6ff" >Tb4b4b4&T79c0ff2
Tffa657command -v node >Tb4b4b4&T79c0ff2 Tff7b72|| Tffa657true
Tffa657exit T79c0ff1
Tff7b72fi
Tff7b72}

require_node_min T79c0ff24

mkdir -p release-assets

Te6edf3HOST_ARCHTff7b72=Ta5d6ff"Tff7b72$(uname -mTff7b72)Ta5d6ff"
Tff7b72case Ta5d6ff"Te6edf3$HOST_ARCHTa5d6ff" Tff7b72in
x86_64Tff7b72) Te6edf3NATIVE_ARCHTff7b72=Ta5d6ff"x64" Tb4b4b4;Tb4b4b4;
aarch64Tb4b4b4|arm64Tff7b72) Te6edf3NATIVE_ARCHTff7b72=Ta5d6ff"arm64" Tb4b4b4;Tb4b4b4;
*Tff7b72) Te6edf3NATIVE_ARCHTff7b72=Ta5d6ff"Te6edf3$HOST_ARCHTa5d6ff" Tb4b4b4;Tb4b4b4;
Tff7b72esac

Te6edf3LINUX_FORMATSTff7b72=Ta5d6ff"Tffd700${Te6edf3MESHCHATX_LINUX_FORMATSTff7b72:-Te6edf3allTffd700}Ta5d6ff"
Tff7b72if Tff7b72[ Ta5d6ff"Te6edf3$LINUX_FORMATSTa5d6ff" Tff7b72= Ta5d6ff"all" Tff7b72]Tb4b4b4; Tff7b72then
Te6edf3LINUX_FORMATSTff7b72=Ta5d6ff"appimage,deb,rpm,apk"
Tff7b72fi

has_formatTff7b72(Tff7b72) Tff7b72{
Tff7b72case Ta5d6ff"Ta5d6ff,Te6edf3$LINUX_FORMATSTa5d6ff,Ta5d6ff" Tff7b72in
*Ta5d6ff"Ta5d6ff,Te6edf3$1Ta5d6ff,Ta5d6ff"*Tff7b72) Tff7b72return T79c0ff0 Tb4b4b4;Tb4b4b4;
*Tff7b72) Tff7b72return T79c0ff1 Tb4b4b4;Tb4b4b4;
Tff7b72esac
Tff7b72}

Tff7b72for _fmt Tff7b72in Tffd700${Te6edf3LINUX_FORMATSTb4b4b4//,/ Tffd700}Tb4b4b4; Tff7b72do
Tff7b72case Ta5d6ff"Te6edf3$_fmtTa5d6ff" Tff7b72in
appimageTb4b4b4|debTb4b4b4|rpmTb4b4b4|apkTff7b72) Tb4b4b4;Tb4b4b4;
*Tff7b72)
Tffa657echo Ta5d6ff"Ta5d6ffUnknown Linux package format 'Te6edf3$_fmtTa5d6ff' in MESHCHATX_LINUX_FORMATS (expected appimage, deb, rpm, apk, or all)Ta5d6ff" >Tb4b4b4&T79c0ff2
Tffa657exit T79c0ff1
Tb4b4b4;Tb4b4b4;
Tff7b72esac
Tff7b72done

Te6edf3appimage_deb_targetsTff7b72=Ta5d6ff""
has_format appimage Tff7b72&& Te6edf3appimage_deb_targetsTff7b72=Ta5d6ff"Te6edf3$appimage_deb_targetsTa5d6ff AppImageTa5d6ff"
has_format deb Tff7b72&& Te6edf3appimage_deb_targetsTff7b72=Ta5d6ff"Te6edf3$appimage_deb_targetsTa5d6ff debTa5d6ff"
Te6edf3appimage_deb_targetsTff7b72=Ta5d6ff"Tffd700${Te6edf3appimage_deb_targetsTb4b4b4# Tffd700}Ta5d6ff"

Tff7b72if Tff7b72[ Ta5d6ff"Tffd700${Te6edf3SKIP_WHEELTff7b72:-Te6edf30Tffd700}Ta5d6ff" !Tff7b72= T79c0ff1 Tff7b72]Tb4b4b4; Tff7b72then
Tff7b72if Tff7b72[ Ta5d6ff"Te6edf3$NATIVE_ARCHTa5d6ff" Tff7b72= Ta5d6ff"x64" Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Building Python wheel..."
task build:wheel
Tff7b72else
Tffa657echo Ta5d6ff"Ta5d6ffSkipping wheel on Te6edf3$NATIVE_ARCHTa5d6ff runner (pure-Python wheel built on x64).Ta5d6ff"
Tff7b72fi
Tff7b72else
Tffa657echo Ta5d6ff"Skipping wheel (SKIP_WHEEL=1)."
Tff7b72fi

Tff7b72if Tff7b72[ Ta5d6ff"Tffd700${Te6edf3SKIP_ELECTRONTff7b72:-Te6edf30Tffd700}Ta5d6ff" !Tff7b72= T79c0ff1 Tff7b72]Tb4b4b4; Tff7b72then
Tff7b72if Tff7b72[ -n Ta5d6ff"Te6edf3$appimage_deb_targetsTa5d6ff" Tff7b72]Tb4b4b4; Tff7b72then
pnpm run electron-postinstall
Tff7b72if Tff7b72[ Ta5d6ff"Te6edf3$NATIVE_ARCHTa5d6ff" Tff7b72= Ta5d6ff"x64" Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffElectron linux x64 (Te6edf3$appimage_deb_targetsTa5d6ff)...Ta5d6ff"
Te6edf3PLATFORMTff7b72=linux Te6edf3ARCHTff7b72=x64 pnpm run build
T8b949e# shellcheck disable=SC2086
pnpm Tffa657exec electron-builder --linux Te6edf3$appimage_deb_targets --x64 --publishTff7b72=never
Tff7b72elif Tff7b72[ Ta5d6ff"Te6edf3$NATIVE_ARCHTa5d6ff" Tff7b72= Ta5d6ff"arm64" Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffElectron linux arm64 (Te6edf3$appimage_deb_targetsTa5d6ff)...Ta5d6ff"
Te6edf3PLATFORMTff7b72=linux Te6edf3ARCHTff7b72=arm64 pnpm run build
T8b949e# shellcheck disable=SC2086
pnpm Tffa657exec electron-builder --linux Te6edf3$appimage_deb_targets --arm64 --publishTff7b72=never
Tff7b72fi
Tff7b72else
Tffa657echo Ta5d6ff"Skipping AppImage/deb (not selected in MESHCHATX_LINUX_FORMATS)."
Tff7b72fi

Tff7b72if Tff7b72[ Ta5d6ff"Te6edf3$NATIVE_ARCHTa5d6ff" Tff7b72= Ta5d6ff"x64" Tff7b72]Tb4b4b4; Tff7b72then
Tff7b72if has_format rpmTb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"RPM (best-effort)..."
Tff7b72if ! task dist:fe:rpmTb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"RPM build failed or skipped; continuing." >Tb4b4b4&T79c0ff2
Tff7b72fi
Tff7b72fi
Tff7b72if has_format apkTb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"APK (best-effort)..."
Tff7b72if ! task dist:fe:apkTb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"APK build failed or skipped; continuing." >Tb4b4b4&T79c0ff2
Tff7b72fi
Tff7b72fi
Tff7b72elif has_format rpm Tff7b72|| has_format apkTb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffSkipping RPM/APK on Te6edf3$NATIVE_ARCHTa5d6ff runner (built on x64 only).Ta5d6ff" >Tb4b4b4&T79c0ff2
Tff7b72fi
Tff7b72else
Tffa657echo Ta5d6ff"Skipping Electron packages (SKIP_ELECTRON=1)."
Tff7b72fi

Tffa657echo Ta5d6ff"Collecting release files..."
find dist -maxdepth T79c0ff1 -type f Tffea00\( -name Ta5d6ff"*-linux*.AppImage" -o -name Ta5d6ff"*-linux*.deb" -o -name Ta5d6ff"*-linux*.rpm" -o -name Ta5d6ff"*-linux*.apk" Tffea00\) -exec cp -f Tff7b72{Tff7b72} release-assets/ Tffea00\; T79c0ff2>/dev/null Tff7b72|| Tffa657true
find python-dist -maxdepth T79c0ff1 -type f -name Ta5d6ff"*.whl" -exec cp -f Tff7b72{Tff7b72} release-assets/ Tffea00\; T79c0ff2>/dev/null Tff7b72|| Tffa657true

Tff7b72if Tff7b72[ -d meshchatx/public Tff7b72] Tff7b72&& Tff7b72[ Ta5d6ff"Tffd700${Te6edf3SKIP_ELECTRONTff7b72:-Te6edf30Tffd700}Ta5d6ff" !Tff7b72= T79c0ff1 Tff7b72]Tb4b4b4; Tff7b72then
Tff7b72( Tffa657cd meshchatx/public Tff7b72&& zip -qr Ta5d6ff"Tffd700${Te6edf3ROOTTffd700}Ta5d6ff/release-assets/meshchatx-frontend.zipTa5d6ff" . Tff7b72)
Tff7b72fi

Tff7b72{
Tffa657echo Ta5d6ff"## Integrity"
Tffa657echo Ta5d6ff""
Tffa657echo Ta5d6ff"Each artifact may have a matching **\`*.cosign.bundle\`** when repository signing secrets are configured (see SECURITY.md)."
Tffa657echo Ta5d6ff""
Tffa657echo Ta5d6ff"SBOM: **\`sbom.cyclonedx.json\`** (CycloneDX) when produced by CI."
Tff7b72} > release-body.md

Tff7b72if Tff7b72[ Ta5d6ff"Tffd700${Te6edf3TRIVY_SBOMTff7b72:-Te6edf31Tffd700}Ta5d6ff" !Tff7b72= T79c0ff0 Tff7b72] Tff7b72&& Tffa657command -v trivy >/dev/null T79c0ff2>Tb4b4b4&T79c0ff1Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Generating SBOM..."
trivy fs --format cyclonedx --include-dev-deps --output release-assets/sbom.cyclonedx.json .
Tff7b72else
Tffa657echo Ta5d6ff"Skipping SBOM (trivy not on PATH or TRIVY_SBOM=0)." >Tb4b4b4&T79c0ff2
Tff7b72fi

Tffa657echo Ta5d6ff"github-build-linux-release-assets.sh: done; see ./release-assets/"

Served by rngit 1.3.7 - Generated in 0.02s